/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package WebServices;


import javax.jws.WebService;

import DataTypes.DataComentario;
import DataTypes.DataContenido;
import DataTypes.DataGrupo;
import Hndlr.HndlrGrupo;
import Hndlr.HndlrUsuario;
import Interfaces.Factory;
import Interfaces.ICtrlAgregarEntradaMuro;
import enums.EnumAprob;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
import java.util.logging.Logger;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.ParameterStyle;
import javax.jws.soap.SOAPBinding.Style;
import javax.xml.ws.Endpoint;
import objetos.Comentario;
import objetos.Contenido;
import objetos.Documento;
import objetos.Grupo;
import objetos.Imagen;
import objetos.Remoto;
import objetos.Textos;
import objetos.Video;

/**
 *
 * @author Sebas
 */
@WebService
@SOAPBinding(style = Style.RPC, parameterStyle = ParameterStyle.WRAPPED)

public class CtrlAgregarEntradaMuroWS{

    private Endpoint endpoint = null;
    private Logger log = Logger.getLogger(CtrlAgregarEntradaMuroWS.class.getName());

    
    @WebMethod(exclude = true)
    public void publicar() {
        Propiedades propiedades = Propiedades.getInstance();
        String nomCtrl = "CtrlAgregarEntradaMuro";
        String camino = "http://" + propiedades.getServer() + ":" + propiedades.getPuerto() + "/" + nomCtrl;
        log.info("publicando el endpoint "+nomCtrl);
        endpoint = Endpoint.publish(camino, this);
        log.info("Endpoint "+nomCtrl+" publicado en " + camino);
    }
    
       @WebMethod(exclude = true)
    public Endpoint getEndpoint() {
        return endpoint;
    }
    @WebMethod
    public DataGrupo[] listarGrupos() {
        HndlrGrupo Hgrupo = HndlrGrupo.getInstance();
        ArrayList<DataGrupo> listG = Hgrupo.listarGrupos();
        Iterator<DataGrupo> it = listG.iterator();
        int tam = listG.size();
        DataGrupo[] datG = new DataGrupo[tam];
        int i = 0;
        while(it.hasNext()){
            
            datG[i] = it.next();
            i++;
        }
        return datG;
       
    }

    /*@Override
    public void agregarContImagen(String titulo, String url, String grupo, String autor, String tipoContenido) {
        //Para grupos.
        if (tipoContenido.equals("Imagen")){
            
            Contenido contImg = new Imagen(titulo,url,autor);
            if (grupo.equals("")){
                HndlrUsuario.getInstance().obtenerUsuario(autor).agregarContenidoMuro(contImg);
            }
            else
                HndlrGrupo.getInstance().obtenerGrupo(grupo).agregarContenidoMuro(contImg);
            
        }
        
    }*/
    @WebMethod
    public void agregarContImagen(@WebParam(name = "titulo")String titulo, @WebParam(name = "url")String url, @WebParam(name = "muro")String muro, @WebParam(name = "autor")String autor,@WebParam(name = "tipoContenido") String tipoContenido,@WebParam(name = "admin")boolean admin) {
        //Para grupos.
        if (tipoContenido.equals("Imagen")){
            
            
            Contenido contImg = new Imagen(titulo,url,autor);
            if(admin)
            {
                contImg.setAprobacion(EnumAprob.APROBADO);
                contImg.setPublicar(true);
            }
            if (HndlrGrupo.getInstance().containsKey(muro))
                HndlrGrupo.getInstance().obtenerGrupo(muro).agregarContenidoMuro(contImg);
            else{
                contImg.setAprobacion(EnumAprob.APROBADO);
                HndlrUsuario.getInstance().obtenerUsuario(muro).agregarContenidoMuro(contImg);
            }
        }
        
    } 
     @WebMethod
    public void agregarContTexto(@WebParam(name = "nomContenido")String nomContenido,@WebParam(name = "cuerpo") String cuerpoTexto,@WebParam(name = "muro") String muro, @WebParam(name = "autor")String autor,@WebParam(name = "tipoContenido") String tipoContenido,@WebParam(name = "admin")boolean admin) {
        if (tipoContenido.equals("Texto")){
            
            Contenido contImg = new Textos(nomContenido,cuerpoTexto,autor);
            if(admin)
            {
                contImg.setAprobacion(EnumAprob.APROBADO);
                contImg.setPublicar(true);
            }
            if (HndlrGrupo.getInstance().containsKey(muro))
                HndlrGrupo.getInstance().obtenerGrupo(muro).agregarContenidoMuro(contImg);
            else{
                contImg.setAprobacion(EnumAprob.APROBADO);
                HndlrUsuario.getInstance().obtenerUsuario(muro).agregarContenidoMuro(contImg);
            }
            
        }
    }
    @WebMethod
    public void agregarContVideo(@WebParam(name = "titulo")String titulo,@WebParam(name = "url") String url,@WebParam(name = "muro") String muro,@WebParam(name = "autor") String autor,@WebParam(name = "tipoContenido") String tipoContenido) {
        //Para grupos.
        if (tipoContenido.equals("Video")){
            
            Contenido contImg = new Video(titulo,url,autor);
            if (HndlrGrupo.getInstance().containsKey(muro))
                HndlrGrupo.getInstance().obtenerGrupo(muro).agregarContenidoMuro(contImg);
            else{
                contImg.setAprobacion(EnumAprob.APROBADO);
                HndlrUsuario.getInstance().obtenerUsuario(muro).agregarContenidoMuro(contImg);
            }
            
        }
    }
    
    @WebMethod
    public void agregarContRemoto(@WebParam(name = "titulo")String titulo,@WebParam(name = "url") String url,@WebParam(name = "muro") String muro,@WebParam(name = "autor") String autor,@WebParam(name = "tipoContenido") String tipoContenido) {
        if (tipoContenido.equals("Remoto")){
            Contenido contImg = new Remoto(titulo,url,autor);
            if (HndlrGrupo.getInstance().containsKey(muro))
                HndlrGrupo.getInstance().obtenerGrupo(muro).agregarContenidoMuro(contImg);
            else{
                contImg.setAprobacion(EnumAprob.APROBADO);
                HndlrUsuario.getInstance().obtenerUsuario(muro).agregarContenidoMuro(contImg);
            }
        }
    }
    
    @WebMethod
    public void agregarContDocumento(@WebParam(name = "titulo")String titulo,@WebParam(name = "url") String url,@WebParam(name = "muro") String muro,@WebParam(name = "autor") String autor,@WebParam(name = "tipoContenido") String tipoContenido) {
        //Para grupos.
        if (tipoContenido.equals("Documento")){
            
            Contenido contImg = new Documento(titulo,url,autor);
            if (HndlrGrupo.getInstance().containsKey(muro))
                HndlrGrupo.getInstance().obtenerGrupo(muro).agregarContenidoMuro(contImg);
            else{
                contImg.setAprobacion(EnumAprob.APROBADO);
                HndlrUsuario.getInstance().obtenerUsuario(muro).agregarContenidoMuro(contImg);
            }
            
        }
        
    }
    
    @WebMethod
    public void agregarContenido(@WebParam(name = "datC")DataContenido datC,@WebParam(name = "muro")String muro){
        
        Contenido cont = null;
        
        if (datC.getTipo().equals("Documento"))
                               
            cont = new Documento(datC.getTitulo(),datC.getUrl(),datC.getAutor().getCorreo());
        
        if(datC.getTipo().equals("Imagen"))
            
            cont = new Imagen(datC.getTitulo(),datC.getUrl(),datC.getAutor().getCorreo());
           
        if(datC.getTipo().equals("Video"))
        
            cont = new Video(datC.getTitulo(),datC.getUrl(),datC.getAutor().getCorreo());
        
        if(datC.getTipo().equals("Texto"))
        
            cont = new Textos(datC.getTitulo(), datC.getCuerpo(), datC.getAutor().getCorreo());
                    
                    
            cont.setFechaPublicacion(datC.getFechaPublicacion());
            cont.setBloqueado(datC.isBloqueado());
            cont.setAprobacion(datC.getAprobacion());
            ArrayList<Comentario> listCom = new ArrayList<Comentario>();
            Iterator<DataComentario> it = datC.getComentarios().iterator();
            DataComentario dC;
            while(it.hasNext())
            {
                dC = it.next();
                Comentario c = new Comentario(dC);
                listCom.add(c);
                
            }
            
            cont.setComentarios(listCom);
            
            if (HndlrGrupo.getInstance().containsKey(muro))
                HndlrGrupo.getInstance().obtenerGrupo(muro).agregarContenidoMuro(cont);
            else{
                cont.setAprobacion(EnumAprob.APROBADO);
                HndlrUsuario.getInstance().obtenerUsuario(muro).agregarContenidoMuro(cont);
        
            }
    }
    @WebMethod
    public void etiquetarImagen(@WebParam(name = "titCont")String titCont,@WebParam(name = "fechaPub") Calendar fechaPub,@WebParam(name = "correoDuenoMuro") String correoDuenoMuro,@WebParam(name = "correoEtiquetad") String[] correoEtiquetado,@WebParam(name = "esGrupo") boolean esGrupo) {
        
        ArrayList<String> arr = new ArrayList<String>();
        int tam = correoEtiquetado.length;
        while(tam!=0){
            
            arr.add(correoEtiquetado[tam-1]);
            tam--;
        }
        ICtrlAgregarEntradaMuro ctrlAgregarEntrada = Factory.getInstance().getAgregarEntradaMuro();
        ctrlAgregarEntrada.etiquetarImagen(titCont, fechaPub, correoDuenoMuro, arr, esGrupo);
        
    }
    @WebMethod
    public void quitarEtiquetaImagen(@WebParam(name = "titCont")String titCont,@WebParam(name = "fechaPub") Calendar fechaPub, @WebParam(name = "correoDuenoMuro") String correoDuenoMuro,@WebParam(name = "correoEtiquetado") String correoEtiquetado,@WebParam(name = "esGrupo") boolean esGrupo) {
        
        if (esGrupo){
            HndlrGrupo.getInstance().obtenerGrupo(correoDuenoMuro).quitarEtiquetaImg(titCont, fechaPub, correoEtiquetado);
        } else {
            HndlrUsuario.getInstance().obtenerUsuario(correoDuenoMuro).quitarEtiquetaImg(titCont, fechaPub, correoEtiquetado);
        }
    }
    
    @WebMethod
    public DataContenido[] ContenidoEtiquetadoUsr(@WebParam(name = "correoUsr")String correoUsr){
        ICtrlAgregarEntradaMuro ctrl = Factory.getInstance().getAgregarEntradaMuro();
        ArrayList<DataContenido> arrayCont = ctrl.ContenidoEtiquetadoUsr(correoUsr);
        
        int tam = arrayCont.size();
        DataContenido dCont[] = new DataContenido[tam];
        Iterator<DataContenido> it = arrayCont.iterator();
        
        int i = 0;
        while(it.hasNext()){
            
            dCont[i] = it.next();
            i++;
        }
        
        return dCont;
        
    }
    
}
